/**
 * 请求状态管理仓库
 * 管理全局请求状态、加载指示器和错误信息
 */

import { reactive } from 'vue';

// 默认状态
const defaultState = {
  // 是否正在加载
  loading: false,
  
  // 最近的错误
  error: null,
  
  // 错误历史
  errorHistory: [],
  
  // 请求统计
  stats: {
    total: 0,
    success: 0,
    error: 0,
    canceled: 0
  },
  
  // 当前活跃的请求
  activeRequests: [],
  
  // 网络状态
  networkStatus: {
    online: true,
    type: 'unknown'
  }
};

// 创建响应式状态
const state = reactive({
  ...defaultState
});

/**
 * 请求状态仓库
 * 使用Vue响应式系统管理全局请求状态
 */
function useRequestStore() {
  /**
   * 设置全局加载状态
   * @param {Boolean} status 加载状态
   */
  function setLoading(status) {
    state.loading = !!status;
  }

  /**
   * 设置错误信息
   * @param {Object} error 错误对象
   */
  function setError(error) {
    // 设置最新错误
    state.error = error;
    
    // 添加到错误历史
    if (error) {
      state.errorHistory = [error, ...state.errorHistory].slice(0, 10);
      state.stats.error++;
    }
  }

  /**
   * 清除错误信息
   */
  function clearError() {
    state.error = null;
  }

  /**
   * 清除错误历史
   */
  function clearErrorHistory() {
    state.errorHistory = [];
  }

  /**
   * 更新请求统计
   * @param {String} type 统计类型：'total', 'success', 'error', 'canceled'
   * @param {Number} increment 增量，默认为1
   */
  function updateStats(type, increment = 1) {
    if (state.stats[type] !== undefined) {
      state.stats[type] += increment;
    }
  }

  /**
   * 添加活跃请求
   * @param {Object} request 请求信息
   */
  function addActiveRequest(request) {
    state.activeRequests.push(request);
    updateStats('total');
  }

  /**
   * 移除活跃请求
   * @param {String} requestId 请求ID
   * @param {String} status 请求状态：'success', 'error', 'canceled'
   */
  function removeActiveRequest(requestId, status = 'success') {
    const index = state.activeRequests.findIndex(req => req.requestId === requestId);
    
    if (index >= 0) {
      state.activeRequests.splice(index, 1);
      
      // 更新对应的统计数据
      if (status && status !== 'total') {
        updateStats(status);
      }
    }
  }

  /**
   * 设置网络状态
   * @param {Object} status 网络状态
   */
  function setNetworkStatus(status) {
    state.networkStatus = {
      ...state.networkStatus,
      ...status
    };
  }

  /**
   * 重置状态到默认值
   */
  function resetState() {
    Object.assign(state, defaultState);
  }

  /**
   * 添加错误到历史记录
   * @param {Object} error 错误对象
   */
  function addErrorHistory(error) {
    if (error) {
      state.errorHistory = [error, ...state.errorHistory].slice(0, 10);
    }
  }

  // 返回仓库方法和状态
  return {
    // 状态
    state,
    
    // 方法
    setLoading,
    setError,
    clearError,
    clearErrorHistory,
    updateStats,
    addActiveRequest,
    removeActiveRequest,
    setNetworkStatus,
    resetState,
    addErrorHistory
  };
}

// 修改导出方式
// export { useRequestStore };
export default useRequestStore(); 